package org.eoti.util.plugin;

import org.eoti.util.ResourceManager;

import java.util.logging.Logger;
import java.util.Properties;

/**
 * The MIT License
 * <p/>
 * Copyright (c) 2009 Malachi de AElfweald (malachid@gmail.com)
 * <p/>
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to the following conditions:
 * <p/>
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
 * Software.
 * <p/>
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
public class SettingsPlugin
implements Plugin
{
	private Logger logger = Logger.getLogger( getClass().getName() );
	private ResourceManager defaults;
	private String name;
	protected Properties instanced;

	/**
	 * @param name of this particular set of settings
	 * @param defaultResourcePath resource bundle location for the default values for this plugin
	 */
	public SettingsPlugin(String name, String defaultResourcePath)
	{
		this.name = name;
		this.defaults = new ResourceManager(defaultResourcePath);
		this.instanced = new Properties();
	}

	/**
	 * Get the name of this SettingsPlugin
	 * @return name of this set of settings
	 */
	public String getName()
	{
		return name;
	}

	public Logger getLogger(){return logger;}
	protected ResourceManager getDefaultSettings(){return defaults;}
	protected Properties getInstancedSettings(){return instanced;}

	public void initialize()
	{
		// no-op
	}

	public String getProperty(String key)
	{
		return System.getProperty(key, instanced.getProperty( key, defaults.getString(key)));
	}

	public Integer getIntProperty(String key)
	{
		return Integer.parseInt(getProperty(key));
	}

	public Boolean getBoolProperty(String key)
	{
		return Boolean.parseBoolean(getProperty(key));
	}

	public String setProperty(String key, String value)
	{
		String eld = getProperty(key);
		instanced.setProperty( key, value );
		return eld;
	}

	public Integer setIntProperty(String key, Integer value)
	{
		Integer eld = getIntProperty(key);
		instanced.setProperty( key, value.toString() );
		return eld;
	}

	public Boolean setBoolProperty(String key, Boolean value)
	{
		Boolean eld = getBoolProperty(key);
		instanced.setProperty(key, value.toString() );
		return eld;
	}
}
